<?php
/**
 * Created by PhpStorm.
 * User: chindor
 * Date: 2018/6/28
 * Time: 16:47
 */

    /**
     * 将当前路由上的控制器 或者 操作 与 参数 intended_url中的参数进行匹配，返回className值
     * 使用方法
     * 1.如果要只匹配控制器，则传入控制器名称(不含Controller尾缀)即可，
     * 2.如果要匹配控制器下的某个操作，则可以传递字符串 controllerName(不含Controller尾缀)/ActionName
     *   如果要匹配该控制器下的多个操作，则传递数组['home/index','home/edit']只要其中一个匹配到就会返回className
     * @param mixed $uri 控制器名称(不含controller)/action 也可以是数组 如果是数组 则其中一个匹配到就算匹配成功
     * @param string $className  两者匹配成功之后要返回的前端class名称 默认为active
     * @return string 返回className
     */
    function match($intented_uri = 'banner/index',$className = 'active')
    {
        $real_uri = request()->route()->uri;
        $real_uri_arr = explode('/',$real_uri);
        $flag = false;

        //增加对uri附加请求参数的情况的处理，（过滤掉请求参数)
        $real_uri_arr = array_filter($real_uri_arr,function($var){
            return $var[0]!=='{' && $var[strlen($var)-1] !=='}';
        });

        //如果是字符串并且其中没有/符号则说明要求匹配的是控制器
        if(is_string($intented_uri) && ($intented_uri = trim($intented_uri,'/'))){
            if(strpos($intented_uri,'/') === false && trim($intented_uri,',')){
                //将当前的uri中的控制器与传入的控制器进行匹配
                $intented_uri_arr = explode(',',$intented_uri);
                foreach($intented_uri_arr as $uri){
                    $flag = $real_uri_arr[count($real_uri_arr)-2] === $uri ? true : false;
                    if($flag) return $className;
                }
            }
            $intented_uri = [$intented_uri];
        }

        //以下匹配的控制器和操作
        if(!is_array($intented_uri)){
            return false;
        }

        foreach($intented_uri as $uri){
            //确保至少是两级以上
            $intented_uri_arr = explode('/',$uri);
            if(count($intented_uri_arr) < 2 || count($real_uri_arr) < 2){
                continue;
            }

            //匹配controller和action
            $flag = ($real_uri_arr[count($real_uri_arr)-2] === $intented_uri_arr[count($intented_uri_arr)-2]) && (end($real_uri_arr) === end($intented_uri_arr))?true : false;
            if($flag) return $className;
        }

        return '';
    }

    /**返回$db数组中存在，而$post中不存在的数组
     * @param $post
     * @param $db
     * @return array
     */
    function del_arr($post,$db)
    {
        if(empty($post)){
            return $db;
        }
        return array_diff($db,$post);
    }

    /**获取一个数组中的某个键 如果键不存在返回'' 否则返回该键对应的值
     * @param $data
     * @param $key
     * @return string
     */
    function filter_empty($data,$key)
    {
        return empty($data)?'':(empty($data[$key])?'':$data[$key]);
    }

    /**
     * @param int $status 订单状态
     * @return string
     */
    function order_staus($status)
    {
        $code = intval($status,0);
        if($code==0){
            return '未确认';
        }elseif ($code==1){
            return '已确认';
        }elseif ($code==2){
            return '已取消';
        }elseif ($code==3){
            return '无效';
        }else{
            return '退货';
        }
    }
